gtk: Only set widget under device on non-virtual crossing events
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 6 Dec 2011 19:20:39 +0000 (20:20 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 24 Feb 2012 03:02:28 +0000 (22:02 -0500)
_gtk_widget_set_device_window() is suppose to make accounting of
the topmost widget under the device at each time, so avoid setting
it on virtual crossing events as the device is already in another
window.

gtk/gtkmain.c

index e8a15b44cc96e43ead50652000b869ea1c7fea67..962656950ed5b1bf79a39a82e04195fba9358817 100644 (file)
@@ -1688,17 +1688,21 @@ gtk_main_do_event (GdkEvent *event)
       break;
 
     case GDK_ENTER_NOTIFY:
-      _gtk_widget_set_device_window (event_widget,
-                                     gdk_event_get_device (event),
-                                     event->any.window);
+      if (event->crossing.detail != GDK_NOTIFY_VIRTUAL &&
+          event->crossing.detail != GDK_NOTIFY_NONLINEAR_VIRTUAL)
+        _gtk_widget_set_device_window (event_widget,
+                                       gdk_event_get_device (event),
+                                       event->any.window);
       if (gtk_widget_is_sensitive (grab_widget))
         gtk_widget_event (grab_widget, event);
       break;
 
     case GDK_LEAVE_NOTIFY:
-      _gtk_widget_set_device_window (event_widget,
-                                     gdk_event_get_device (event),
-                                     NULL);
+      if (event->crossing.detail != GDK_NOTIFY_VIRTUAL &&
+          event->crossing.detail != GDK_NOTIFY_NONLINEAR_VIRTUAL)
+        _gtk_widget_set_device_window (event_widget,
+                                       gdk_event_get_device (event),
+                                       NULL);
       if (gtk_widget_is_sensitive (grab_widget))
         gtk_widget_event (grab_widget, event);
       break;